#ifndef __UTIL_PROCESS_STATE_H__
#define __UTIL_PROCESS_STATE_H__

typedef int (*print_func_t)(const char *format, ...);

#define MAX_BUF_LEN (128)

// 保存临时状态的,放在/tmp,关机后消失
#define FILE_TMP_STATE "/tmp/pcs/state.ini"

// 保存关机后需要保存的状态
#define FILE_SAVE_STATE "/root/pcs/state.ini"

/*
 * 以RUN开头的，都是临时状态，保存到/tmp目录下，序号从0开始，方便数组索引
 */
// 本次正常运行时间，上电重启或程序异常终止后重拉都会清零（不用保存到文件）
#define KEY_RUN_SECOND 0
// 本次上电总运行时间，包含多次异常终止后重新运行时间（不用保存到文件）
#define KEY_RUN_TOTAL_SECOND 1
// 本次运行中，程序异常终止的次数，终止后由后台程序自动拉起(程序启动更新)
#define KEY_RUN_EXCEPT 2
// 本次运行中，程序的版本(程序启动更新)
#define KEY_RUN_VERSION 3
// 本次上电开始时间
#define KEY_RUN_FIRST_TIME 4
// 本次运行开始时间
#define KEY_RUN_CURR_TIME 5
// 本次统计运行时间的时刻
#define KEY_RUN_RECORD_TIME 6

/*
 * 需要存储的状态，保存到flash中，序号从0开始，方便数组索引
 * 包含正常的数据 以及 简单异常数据统计
 */
// 本台设备总的运行时间（定时更新）
#define KEY_TOTAL_SECOND 0
// 本台设备总的异常终止的次数(程序启动更新)
#define KEY_TOTAL_EXCEPT 1
// 本台设备总的上电次数(程序启动更新)
#define KEY_TOTAL_BOOTCNT 2

// 上一次异常终止对应的启动次数(程序启动更新)
#define KEY_LAST_EXCEPT_BOOTCNT 3
// 上一次异常终止对应的软件版本(程序启动更新)
#define KEY_LAST_EXCEPT_VERSION 4
// 上一次异常终止对应的总的异常数(程序启动更新)
#define KEY_LAST_EXCEPT_TOTAL 5
// 上一次异常终止对应的世界时间(可能不正确)(程序启动更新)
#define KEY_LAST_EXCEPT_TIME 6

// 文件索引号，避免字符串比较
typedef enum
{
    FILE_TMP_IDX = 0,
    FILE_SAVE_IDX,
    FILE_MAX
} file_e;

// 放在main函数比较靠前的位置调用
int proc_state_bootup(const char *version,print_func_t print);

// 可以定时调用(建议30分钟)
int proc_state_update(void);

void*proc_state_query(file_e file_id,int key);

#endif /* __UTIL_PROCESS_STATE_H__ */